home *** CD-ROM | disk | FTP | other *** search
/ Amiga Inside! / Amiga FD Inside (1995)(Ultramax).iso / berndspd / cli-tools / version / version.asm < prev    next >
Encoding:
Assembly Source File  |  1993-07-20  |  6.9 KB  |  370 lines

  1. ;Name:  Version
  2.  
  3. ;versucht die Version von einem residenten Modul oder Prog.File zu ermitteln
  4. ;endstanden, da c:version nur unzureichend oder falsche werte ausgab
  5. ;22.04.93 bemerkung zu version-Befehl-2.0 , ermittelt die version, indem das Prog.
  6. ;  die Versions-ID sucht, und von dort die werte nimmt. Bei librarys geht das
  7. ;  Betriebssytem aber anders vor, so daß unterschiede vorhanden sind.
  8. ;  Vers. setzt bei Libs/Devs/l/local  $4afc und ... voraus, siehe lib.struct
  9. ;                  Prog. "$VER: " voraus.
  10. ;  der String muß dann folgendermaßen aussehen, sonst fehler: "name Vers.Revis "
  11.  
  12.  
  13.  
  14. ;History:
  15. ;begonnen am, Datum: 20.03.93
  16. ;20.04.93 Versionsbefehl von OS2.1 gedebugt, daraus ergaben sich diverse änderungen
  17. ;  meines Programms. (V2.00)
  18. ;30.04.93 teste auf falsche offsets, da sonst Adresserror bei falschen werten
  19.  
  20.  
  21.  
  22. my_version    macro
  23.     dc.b    "2.01"
  24.     endm
  25. my_Date    macro
  26.     dc.b    "(30.03.93)"
  27.     endm
  28.  
  29.  
  30. *----------------------------------------------------------------------------------*
  31.  
  32. ;fest verwendete Register:
  33. ;A4=Prog. anfang, Code
  34. ;A5=eigener Stack
  35. ;A6=Dosbase/execbase
  36. ;A7=Stack
  37. ;d4=file len min
  38. ;d5=file len max
  39. ;d6=returncode (nur am prog.ende)
  40.  
  41.  
  42.  
  43. ;Verwendete Offsets und Variablen über (a5)
  44.  
  45. Link_Felder    equ    23    ;anzahl der benötigten felder eingeben
  46.  
  47. link_size    equ    Link_felder*-4    ;Felder *4 in bytes, aber negativ
  48.     rsset    link_size
  49.  
  50. execbase        rs.l    1
  51. dosbase        rs.l    1
  52. input        rs.l    1
  53. output        rs.l    1
  54.  
  55. Arg_Base        rs.l    1
  56. Arg_NAME        rs.l    1
  57. Arg_VERSION    rs.l    1
  58. Arg_REVISION    rs.l    1
  59. Arg_UNIT        rs.l    1
  60. Arg_FILE        rs.l    1
  61. Arg_INTERNAL    rs.l    1
  62. Arg_RES        rs.l    1
  63. Arg_FULL        rs.l    1
  64. Arg_HELP        rs.l    1
  65.  
  66. File_len        rs.l    1
  67. Mem_read_base    rs.l    1    ;*mem
  68. Mem_buffer_base    rs.l    1
  69. file_name        rs.l    1    ;*
  70. File_version    rs.l    1
  71. file_revision    rs.l    1
  72. file_typ        rs.l    1    ;09, 08, ..
  73. file_found    rs.l    1
  74. File_ID        rs.l    1    ;*
  75.  
  76. link_    rs.l    1        ;der letzte erlaubte wert ist -4
  77.     ifgt    link_        ;ist >0
  78.     fail    Link Feld ist zu klein dimensioniert
  79.     endc
  80.  
  81.  
  82.  
  83. mem_buffer_len    equ    1024
  84.  
  85. ;Flaggs
  86.  
  87.  
  88.  
  89.     incdir    include:
  90.     include    lvo/exec.i
  91.     include    lvo/dos.i
  92.     include    main/call_link.i
  93.  
  94.  
  95.  
  96. Programm    link    a5,#link_size
  97.     movem.l    d2-d7/a2-a3/a6,-(a7)
  98.     moveq    #0,d1
  99.     moveq    #~Link_size/4,d2
  100.     move.l    a5,a1
  101. .next    move.l    d1,-(a1)
  102.     dbf    d2,.next
  103.     moveq    #20,d6        ;returned ..
  104.  
  105.     moveq    #0,d0
  106.     lea    dosname(pc),a1
  107.     callexec    _LVOopenlibrary,execbase
  108.     move.l    d0,dosbase(a5)
  109.     beq    no_Dos
  110.     move.l    d0,a6
  111.     cmpi.w    #$25,$14(a6)
  112.     bcs    NoKS20        ;ned KS 2.0
  113.  
  114. Usage    lea    usage_txt(pc),a1
  115.     move.l    a1,d1
  116.     lea    arg_name(a5),a0    ;zeiger auf den arg-buffer
  117.     move.l    a0,d2
  118.     moveq    #0,d3        ;??
  119.     calldos    -$31e        ;Arg auswertung
  120.     move.l    d0,arg_base(a5)
  121.     beq    dos_error
  122.  
  123. output_    calldos    _LVOoutput
  124.     move.l    d0,output(a5)
  125.     beq    Prog_end
  126.  
  127.     tst.l    Arg_HELP(a5)
  128.     bmi    help
  129.  
  130.     move.l    #mem_buffer_Len,d0
  131.     moveq    #1,d1
  132.     callexec    _LVOallocmem,execbase
  133.     move.l    d0,Mem_buffer_base(a5)
  134.     beq    no_Mem
  135.  
  136.     include    quell:version_tst.asm
  137.  
  138.  
  139. *-------Progr.-Ende----------------------------------------------------------------*
  140.  
  141. ;D6=Returncode
  142.  
  143.  
  144. NoKS20    lea    open_CLI(pc),a0
  145.     move.l    a0,d1
  146.     move.l    #1006,d2
  147.     calldos    _LVOOpen
  148.     move.l    d0,d5
  149.     beq.s    .next        ;noopen
  150.     move.l    d5,d1
  151.     lea    NoKS20_txt(pc),a0
  152.     move.l    a0,d2
  153.     moveq    #NoKS20_txt_len,d3
  154.     calldos    _LVOWrite
  155.     move.l    d5,d1
  156.     calldos    _LVOClose
  157. .next    bra    closedos
  158.  
  159.  
  160. Dos_error    calldos    _LVOIOErr,dosbase
  161.     move.l    d0,d1
  162.     beq.s    .next
  163.     moveq    #0,d2        ;??
  164.     calldos    -$1da        ;Errortext ins shell ausgeben
  165. .next    moveq    #10,d6
  166.     bra    Prog_end_1
  167.  
  168.  
  169. help    lea    Help_txt(pc),a1
  170.     pea    Prog_end(pc)
  171.     bra    write
  172.  
  173.  
  174. no_mem    lea    no_mem_txt(pc),a1
  175.     pea    Prog_end_1(pc)
  176.     moveq    #99,d6
  177.     bra    write
  178.  
  179.  
  180. fail_end    move.l    a0,d1        ;UniRoutione a0=aufzuarbeitender Text
  181.     lea    arg_name(a5),a0
  182.     move.l    a0,d2
  183.     calldos    -$3ba,dosbase
  184.     moveq    #10,d6        ;returned
  185.     bra    Prog_end_1
  186.  
  187.  
  188. *-------------------------------------------------------
  189.  
  190. Prog_end    moveq    #0,d6
  191. Prog_end_1
  192.  
  193.     move.l    Mem_buffer_base(a5),a1
  194.     move.l    a1,d0        ; nur zum testen
  195.     beq.s    mem
  196.     move.l    #mem_buffer_len,d0
  197.     callexec    _LVOfreemem,execbase
  198.  
  199. mem    move.l    mem_read_base(a5),a1
  200.     move.l    a1,d0        ; nur zum testen
  201.     beq.s    .next
  202.     move.l    File_len(a5),d0
  203.     callexec    _LVOfreemem,execbase
  204.  
  205. .next    move.l    arg_base(a5),d1
  206.     beq.s    closeDos
  207.     calldos    -$35a,dosbase    ;free Struct
  208.  
  209. closedos    move.l    dosbase(a5),a1
  210.     callexec    _LVOcloselibrary,execbase
  211.  
  212. no_dos    move.l    d6,d0        ;Prog. returned ??
  213.     movem.l    (a7)+,d2-d7/a2-a3/a6
  214.     unlk    a5
  215.     rts
  216.  
  217.  
  218. ;------------------Unterprogramme----Teil--1-------------------------------------
  219.  
  220.  
  221.     include    include:main/hextodez.asm
  222.  
  223. write    moveq    #0,d3
  224.     move.w    (a1)+,d3
  225.     move.l    a1,d2
  226.     move.l    output(a5),d1
  227.     calldos    _LVOwrite,dosbase
  228.     rts
  229.  
  230.  
  231. *------------------Variablen Felder -----------------------------------------------*
  232.  
  233.  
  234.     dc.b    "$VER: Version "
  235.     MY_version
  236.     dc.b    " "
  237.     MY_date
  238.     dc.b    0
  239.     even
  240.  
  241.  
  242. dosname        dc.b    "dos.library",0
  243.     even
  244.  
  245. versname        dc.b    "version.library",0
  246.     even
  247.  
  248. open_cli        dc.b    "*",0
  249.     even
  250.  
  251. libs_path        dc.b    "LIBS:",0
  252.     even
  253.  
  254. locale_Path    dc.b    "LOCALE:Languages/",0
  255.     even
  256.  
  257. devs_path        dc.b    "DEVS:",0
  258.     even
  259.  
  260. l_path        dc.b    "L:",0
  261.     even
  262.  
  263. DDevice_path    dc.b    ":",0
  264.     even
  265.  
  266. Var_WB        dc.b    "Workbench",0
  267.     even
  268.  
  269. Var_KS        dc.b    "Kickstart",0
  270.     even
  271.  
  272. KS_Vers_txt    dc.b    "Kickstart version %ld.%ld",0
  273.     even
  274.  
  275. WB_Vers_txt    dc.b    ", Workbench version %ld.%ld",0
  276.     even
  277.  
  278. String_Rest    dc.b    10,0
  279.     even
  280.  
  281. einfach_txt    dc.b    "%s %ld.%ld",10,0
  282.     even
  283.  
  284. Full_txt        dc.b    "%s %ld.%ld  Typ: %s, Found: %s",10,"  %s",10,0
  285.     even
  286.  
  287.  
  288. Usage_txt    dc.b    "NAME,VERSION/N,REVISION/N,UNIT/N,FILE/S,INTERNAL/S,RES/S,"
  289.     dc.b    "FULL/S,HELP/S",0
  290.     even
  291.  
  292. Help_txt    dc.w    Help_txt_len
  293.     dc.b    "programmed by Lutz Hanke, in Assembler.",10
  294.     dc.b    "This Programm it Shareware",10
  295.     dc.b    "Print formated: name version.revision Objecttyp",10
  296.     dc.b    "                Text_info",10,0
  297. Help_txt_len    equ    *-Help_txt-3
  298.     even
  299.  
  300.  
  301. NO_vers_txt    dc.b    "'%s' has not version information",10,0
  302.     even
  303.  
  304. No_Prog_txt    dc.b    "'%s' - File is not Programm",10,0
  305.     even
  306.  
  307. Fail_Hunk_txt    dc.b    "'%s' has a Hunk error",10,0
  308.     even
  309.  
  310. Fail_Structure_txt    dc.b    "'%s' Structure failture",10,0
  311.     even
  312.  
  313. NoKS20_txt    dc.b    "Need Kickstart version 2.04 or greater.",10,0
  314. NoKS20_txt_len    equ    *-NoKS20_txt-1
  315.     even
  316.  
  317. no_mem_txt    dc.w    no_mem_txt_len
  318.     dc.b    "*** Break, No More for Mem",10,0
  319. no_mem_txt_len    equ    *-no_mem_txt-3
  320.     even
  321.  
  322.  
  323. intern    dc.b    "Intern",0,0
  324. extern    dc.b    "Extern",0,0
  325.  
  326. Typ_table    dc.w    .next_0-Typ_table
  327.     dc.w    .next_1-Typ_table
  328.     dc.w    .next_2-Typ_table
  329.     dc.w    .next_3-Typ_table
  330.     dc.w    .next_4-Typ_table
  331.     dc.w    .next_5-Typ_table
  332.     dc.w    .next_6-Typ_table
  333.     dc.w    .next_7-Typ_table
  334.     dc.w    .next_8-Typ_table
  335.     dc.w    .next_9-Typ_table
  336.     dc.w    .next_10-Typ_table
  337.     dc.w    .next_11-Typ_table
  338.     dc.w    .next_12-Typ_table
  339.     dc.w    .next_13-Typ_table
  340.     dc.w    .next_14-Typ_table
  341.     dc.w    .next_15-Typ_table
  342.     dc.w    .next_16-Typ_table
  343.     dc.w    .next_17-Typ_table
  344.     dc.w    .next_18-Typ_table
  345.  
  346. .next_0    dc.b    "Unknown/User",0
  347. .next_1    dc.b    "Task",0
  348. .next_2    dc.b    "Interrupt",0
  349. .next_3    dc.b    "Device",0
  350. .next_4    dc.b    "Msgport",0
  351. .next_5    dc.b    "Message",0
  352. .next_6    dc.b    "Freemsg",0
  353. .next_7    dc.b    "Replymsg",0
  354. .next_8    dc.b    "Resource",0
  355. .next_9    dc.b    "Library",0
  356. .next_10    dc.b    "Memory",0
  357. .next_11    dc.b    "Softint",0
  358. .next_12    dc.b    "Font",0
  359. .next_13    dc.b    "Process",0
  360. .next_14    dc.b    "Semaphore",0
  361. .next_15    dc.b    "Signalsem",0
  362. .next_16    dc.b    "Bootnode",0
  363. .next_17    dc.b    "Install-Hand",0
  364. .next_18    dc.b    "File (Vers=ID)",0
  365.  
  366.  
  367.     end
  368.  
  369.  
  370.